import { createApp } from 'vue'
import { createPinia } from 'pinia'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import App from './App.vue'
import router from './router'

import './assets/main.css'

const app = createApp(App)

// 注册所有图标
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  app.component(key, component)
}

app.use(createPinia())
app.use(router)
app.use(ElementPlus)

// 添加全局传输管理器
app.config.globalProperties.$transferManager = {
  addTask: null,
  updateTask: null,
  completeTask: null,
  showPanel: null,
  hidePanel: null,
  togglePanel: null
}

// 挂载应用
const mountedApp = app.mount('#app')

// 在应用挂载后设置传输管理器的方法
mountedApp.$nextTick(() => {
  try {
    // 如果已经在App.vue中初始化，就不再重复初始化
    if (window.transferManager && typeof window.transferManager.addTask === 'function') {
      console.log('传输管理器已在其他位置初始化，跳过main.js中的初始化');
      return;
    }
    
    const el = document.getElementById('global-transfer-manager')
    if (!el) {
      console.error('找不到传输管理器DOM元素')
      return
    }
    
    const transferManager = el.__vueParentComponent?.ctx
    if (transferManager) {
      console.log('传输管理器在main.js中初始化，可用方法:', Object.keys(transferManager));
      
      // 更新全局属性
      app.config.globalProperties.$transferManager.addTask = transferManager.addTask
      app.config.globalProperties.$transferManager.updateTask = transferManager.updateTask
      app.config.globalProperties.$transferManager.completeTask = transferManager.completeTask
      app.config.globalProperties.$transferManager.showPanel = transferManager.showTransferPanel
      app.config.globalProperties.$transferManager.hidePanel = transferManager.hideTransferPanel
      app.config.globalProperties.$transferManager.togglePanel = transferManager.togglePanel
      
      // 只有在尚未初始化的情况下设置全局window对象
      if (!window.transferManager) {
        window.transferManager = {
          addTask: transferManager.addTask,
          updateTask: transferManager.updateTask,
          completeTask: transferManager.completeTask,
          showPanel: transferManager.showTransferPanel,
          hidePanel: transferManager.hideTransferPanel,
          togglePanel: transferManager.togglePanel
        };
        
        // 为了兼容性，同时提供两种调用方式
        window.transferManager.showTransferPanel = transferManager.showTransferPanel;
        console.log('传输管理器方法已映射:', Object.keys(window.transferManager));
      }
      
      console.log('传输管理器已挂载到全局window对象')
    } else {
      console.error('找不到传输管理器Vue实例')
    }
  } catch (error) {
    console.error('设置传输管理器时出错:', error)
  }
}) 